/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package fachada;

import exceptions.AtributoNaoPreenchidoException;
import exceptions.LoginInvalidoException;
import exceptions.SenhaInvalidaException;
import java.io.IOException;
import sistema.Sistema;

/**
 *
 * @author TalesHugo
 */
public class Fachada {

    private Sistema sistema = new Sistema();

   /**
    * Método que adiciona um usuário a uma estrutura de dados.
    */
   public void criarUsuario(String login, String senha, String nome) throws SenhaInvalidaException, LoginInvalidoException {
       this.sistema.criarUsuario(login, senha, nome);
   }

   /**
    * Método que checa se um usuário está dentro da estrutura de dados.
    */
   public boolean contemUsuario(String login){
       return this.sistema.contemUsuario(login);
   }

   /**
    * Método que adiciona um valor a descrição de um usuário.
    */
   public void editarDescricao(String login, String senha,String descricao) throws LoginInvalidoException, SenhaInvalidaException{
       this.sistema.editarDescricao(login, senha, descricao);
   }

   /**
    * Método que retorna uma String contendo a descrição de um usuário.
    */
   public String getDescricao(String login, String senha) throws AtributoNaoPreenchidoException, LoginInvalidoException, SenhaInvalidaException{
       return this.sistema.getDescricao(login, senha);
   }

   /**
    * Método que adiciona um valor ao estado civil de um usuário.
    */
   public void editarEstadoCivil(String login, String senha, String estado) throws SenhaInvalidaException, LoginInvalidoException{
       this.sistema.editarEstadoCivil(login, senha, estado);
   }

   /**
    * Método que retorna uma String contendo o estado civil de um usuário.
    */
   public String getEstadoCivil(String login, String senha) throws AtributoNaoPreenchidoException, LoginInvalidoException, SenhaInvalidaException{
       return this.sistema.getEstadoCivil(login, senha);
   }

   /**
    * Método que adiciona um valor ao aniversário de um usuário.
    */
   public void editarAniversario(String login, String senha, String data) throws SenhaInvalidaException, LoginInvalidoException{
       this.sistema.editarAniversario(login, senha, data);
   }

   /**
    * Método que retorna uma String contendo o aniversário de um usuário.
    */
   public String getAniversario(String login, String senha) throws AtributoNaoPreenchidoException, LoginInvalidoException, SenhaInvalidaException{
       return this.sistema.getAniversario(login, senha);
   }

   /**
    * Método que adiciona um valor a cidade natal de um usuário.
    */
   public void editarCidadeNatal(String login, String senha, String cidade) throws SenhaInvalidaException, LoginInvalidoException{
       this.sistema.editarCidadeNatal(login, senha, cidade);
   }

   /**
    * Método que retorna uma String contendo a cidade natal de um usuário.
    */
   public String getCidadeNatal(String login, String senha) throws AtributoNaoPreenchidoException, LoginInvalidoException, SenhaInvalidaException{
       return this.sistema.getCidadeNatal(login, senha);
   }

   /**
    * Método que retorna uma String contendo o nome de um usuário.
    */
   public String getNomeUsuario(String login) throws LoginInvalidoException{
       return this.sistema.getNomeUsuario(login);
   }

   /**
    * Método que verifica se um usuário realmente é amigo de outro usuário.
    */
   public boolean ehAmigo(String login, String amigo) throws LoginInvalidoException{
       return this.sistema.ehAmigo(login, amigo);
   }

   /**
    * Método que adiciona um usuário da lista de amigos de outro usuário.
    */
   public void adicionarAmigo(String id, String amigo) throws LoginInvalidoException{
       this.sistema.adicionarAmigo(id, amigo);
   }

   /**
    * Método que retorna uma String formatada de amigos contendo o login de todos os amigos do usuário.
    */
   public String getAmigos(String login) throws LoginInvalidoException{
       return this.sistema.getAmigos(login);
   }

   /**
    * Método que remove um usuário da lista de amigos de outro usuário.
    */
   public void removerAmizade(String id, String amigo) throws LoginInvalidoException{
       this.sistema.removerAmizade(id, amigo);
   }

   /**
    * Método responsável por limpar o map de usuários do sistema e também fazer a persistência dele no sistema.
    */
   public void encerrarSistema() throws IOException, ClassNotFoundException {
       this.sistema.encerrarSistema();
    }

}
